package cn.edu.lsnu.mbti.controller;

import cn.edu.lsnu.mbti.common.AuthAccess;
import cn.edu.lsnu.mbti.common.R;
import cn.edu.lsnu.mbti.dto.UniversityDto;
import cn.edu.lsnu.mbti.entity.University;
import cn.edu.lsnu.mbti.entity.vo.UniversityVo;
import cn.edu.lsnu.mbti.exception.CustomerException;
import cn.edu.lsnu.mbti.service.UniversityService;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

@Slf4j
@RestController
@RequestMapping("university")
public class UniversityController {

    @Resource
    private UniversityService universityService;


    /**
     * vue后台管理修改院校
     * @return
     */
    @PostMapping("saveUniversity")
    public R<String> saveUser(@RequestBody University university){
        if (BeanUtil.isEmpty(university)){
            throw new CustomerException("不能保存空对象");
        }
        return R.success(universityService.saveUser(university));
    }

    /**
     * vue后台管理分页查询院校列表
     * @param universityVo
     * @return
     */
    @PostMapping("queryPageList")
    public R<Page<UniversityDto>> queryPageList(@RequestBody UniversityVo universityVo){
        return R.success(universityService.queryPageList(universityVo));
    }


    /**
     * 根据专业id查询院校集合接口
     * @param majorId
     * @return
     */
    @GetMapping("queryUniversityListByMajorId")
    public R<List<University>> queryUniversityListByMajorId(@RequestParam String majorId){
        return R.success(universityService.selectUniversityListByMajorId(majorId));
    }


    /**
     * 热门推荐
     * 用户点击院校通过名称查询院校的详细信息
     * @param name
     * @return
     */
    @AuthAccess
    @GetMapping("selectByNameForDetail")
    public R<UniversityDto> selectByNameForDetail(@RequestParam String name){
        return R.success(universityService.selectByNameForDetail(name));
    }

    /**
     * 查询学校列表接口
     * @return
     */
    @GetMapping("list")
    public R<List<University>> list(){
        return R.success(universityService.selectUniversityList());
    }

    @PostMapping("selectByRecommend")
    public R<List<UniversityDto>> selectByRecommend(@RequestBody Map<String,String> map){
        return R.success(universityService.selectByRecommend(map.get("majorId"),map.get("userId")));
    }

    /**
     * 点击查看院校详细信息
     * 点击院校，查询院校的详细信息，地址、描述、院校的学科、院校的专业
     * @param id
     * @return
     */
    @AuthAccess
    @GetMapping("selectByIdForDetail")
    public R<UniversityDto> selectByIdForDetail(@RequestParam String id){
        return R.success(universityService.selectByIdForDetail(id));
    }


    /**
     * 通过地区名称和级别查询院校信息
     * @return
     */
    @AuthAccess
    @PostMapping("selectByRegionNameAndSort")           //接口以map来接收
    public R<List<UniversityDto>> selectByRegionNameAndSort(@RequestBody Map<String,Object> map){
        log.info("test1");
        Integer pageNum = (Integer) map.get("pageNum");
        Integer pageSize = (Integer) map.get("pageSize");
        //universityDto不能强转，以map的形式接收
        Map<String, Object> uniMap = (Map<String,Object>) map.get("universityDto");
        UniversityDto dto = new UniversityDto();
        dto.setRegionName((String) uniMap.get("regionName"));
        dto.setLevel((String) uniMap.get("level"));

        return R.success(universityService.selectByRegionNameAndSort(pageNum,pageSize,dto));
    }


    /**
     * 通过名称模糊查询院校信息
     * @param name
     * @return
     */
    @AuthAccess
    @GetMapping("selectByName")
    public R<List<UniversityDto>> selectByName(@RequestParam String name){
        return R.success(universityService.selectByName(name));
    }


    @AuthAccess
    @GetMapping("news")
    public R<List<UniversityDto>> news(){
        return R.success(universityService.selectByName(null));
    }


    /**
     * 访问首页查询热门学校信息
     * @return
     */
    @GetMapping("popularSchool")
    public R<List<University>> popularSchool(){
        return R.success(universityService.popularSchool());
    }

}

